/**
 * @file InetAddress.hpp
 * @brief 网络地址封装类的声明
 * @details 封装了IPv4地址结构，提供IP和端口的操作接口
 */

#ifndef __InetAddress_HPP__
#define __InetAddress_HPP__

#include <string>
#include <netinet/in.h>
using std::string;

namespace wd
{

/**
 * @class InetAddress
 * @brief 网络地址类
 * @details 封装sockaddr_in结构体，提供IP地址和端口号的访问接口
 */
class InetAddress
{
public:
    /**
     * @brief 构造函数
     * @param port 端口号
     * @param ip IP地址字符串，默认为127.0.0.1
     */
    InetAddress(unsigned short port, const string & ip = "127.0.0.1");
    
    /**
     * @brief 从sockaddr_in结构构造
     * @param addr sockaddr_in结构体
     */
    InetAddress(struct sockaddr_in);

    /**
     * @brief 获取IP地址字符串
     * @return IP地址
     */
    string ip() const;
    
    /**
     * @brief 获取端口号
     * @return 端口号
     */
    unsigned short port() const;
    
    /**
     * @brief 获取sockaddr_in结构指针
     * @return sockaddr_in指针
     */
    struct sockaddr_in * getInetAddressPtr() {  return &_addr;  }

private:
    struct sockaddr_in _addr;  ///< 地址结构
};

}//end of namespace wd

#endif

